// 声明一个接口
interface BaseInfo{
  name: string;
  age: number;
}

interface BoyFriend extends BaseInfo{
  //只读属性, 一旦在代码中对该属性进行了编辑, 则 ts 的编译器就会报错
  readonly id: number;
  //可选属性的设置
  car ?: string;
  //限制方法
  // cook: () => void;
  cook(): void;
}

//程序员
interface Programmer extends BaseInfo{
  language: string;
}

let maochen: BoyFriend = {
  id: 1,
  name: '茂晨',
  age: 22,
  car: '比亚迪',
  cook: function(){
    console.log('我可以做饭....');
  }
};

//类与接口的结合使用  implements 实现
//如果一个类要实现一个接口, 就必须要将接口的所有的属性和方法都包含
// 类中可以声明接口中不存在的属性
class XunLianYing implements BoyFriend, Programmer{
  id: number;
  name: string;
  age: number;
  language: string;
  car ?: string;

  constructor(id: number, name: string, age: number, language: string,car?: string){
    this.id = id;
    this.name = name;
    this.age = age;
    this.car = car;
    this.language = language;
  }

  cook(){
    console.log('我可以做饭哦~~~');
  }
  //
  paobu(){
    console.log('我跑 1 千米耗时 3: 40');
  }
}

//实例化对象
let heping = new XunLianYing(2, '和平', 23, 'javascript');

// console.log(heping);



